Indexing and Slicing (NumPy) in Python in Hindi – NumPy Array से Data कैसे निकालें?
Table of Contents
- 1. Array Indexing
- 2. Array Slicing
- 3. Multi-Dimensional Indexing
- 4. Practical Examples
- 5. Fancy Indexing in NumPy
- 6. Difference Between Array Indexing and Slicing in Python in Hindi
जब भी हम NumPy array के साथ काम करते हैं, तो सबसे पहला और सबसे जरूरी काम होता है – array के अंदर से चाहिए हुआ data निकालना। इसी काम को Indexing और Slicing कहते हैं।
Indexing का मतलब है array में से एक specific position की value को access करना, जैसे पहली value या last value।
Slicing का मतलब है array में से एक साथ कई values को एक range के रूप में निकालना, यानी एक हिस्सा (part) select करना।
NumPy arrays normal Python list से इस मामले में ज्यादा powerful होते हैं, क्योंकि इनमें multi-dimensional indexing और fancy indexing जैसी advanced techniques भी मिलती हैं।
Data Science, Machine Learning और Image Processing जैसी fields में यह concept रोज़ाना इस्तेमाल होता है, इसलिए इसे अच्छे से समझना बहुत जरूरी है।
Array Indexing
Array Indexing का मतलब है array के अंदर किसी एक particular position की value को access करना। NumPy में indexing की शुरुआत हमेशा 0 से होती है, ठीक normal Python list की तरह।
import numpy as np
arr = np.array([10, 20, 30, 40, 50])
print(arr[0]) # 10
print(arr[2]) # 30
print(arr[-1]) # 50 (last value)
Positive index का मतलब होता है शुरुआत से गिनती करना, यानी
arr[0]पहली value देगा।Negative index का मतलब होता है आखिर से गिनती करना, यानी
arr[-1]हमेशा last value देगा।अगर दी गई index array के size से बाहर हो, तो Python
IndexErrorदेता है, इसलिए index हमेशा valid range के अंदर होना चाहिए।Indexing से हम एक बार में सिर्फ एक ही value access कर पाते हैं, अगर कई values चाहिए तो Slicing का इस्तेमाल किया जाता है।
Array Slicing
Slicing का इस्तेमाल तब होता है जब हमें array में से एक साथ कई values, यानी एक continuous range निकालनी हो। इसका basic syntax होता है array[start:stop:step]।
import numpy as np
arr = np.array([10, 20, 30, 40, 50, 60])
print(arr[1:4]) # [20 30 40]
print(arr[:3]) # [10 20 30]
print(arr[2:]) # [30 40 50 60]
print(arr[::2]) # [10 30 50]
print(arr[::-1]) # [60 50 40 30 20 10]
startबताता है slicing कहाँ से शुरू होगी, अगर ना दिया जाए तो यह शुरुआत यानी 0 मान लिया जाता है।stopबताता है slicing कहाँ खत्म होगी, लेकिन ध्यान रहे किstopवाली index की value शामिल नहीं होती।stepबताता है कि हर बार कितनी values छोड़कर अगली value ली जाएगी, जैसे::2का मतलब है एक value छोड़कर अगली value लेना।एक बहुत important बात यह है कि NumPy में slicing करने से जो नया array मिलता है, वो असली array का एक "view" होता है, नई copy नहीं। यानी अगर slice में कोई change किया जाए, तो original array भी बदल जाता है।
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
part = arr[1:4]
part[0] = 100
print(arr) # [1 100 3 4 5]
यह SVG दिखा रहा है कि arr[1:4] लिखने पर index 1 से index 3 तक की values (dark purple boxes) कैसे select होती हैं, index 4 शामिल नहीं होता।
Multi-Dimensional Indexing
असली projects में हमेशा एक-dimensional array काम नहीं आता, बल्कि अक्सर हमें 2D या 3D arrays के साथ काम करना पड़ता है, जैसे matrix या image data। NumPy में multi-dimensional array के हर dimension के लिए अलग index दिया जाता है।
import numpy as np
arr2d = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(arr2d[0, 0]) # 1 (pehli row, pehla column)
print(arr2d[1, 2]) # 6 (dusri row, teesra column)
print(arr2d[2]) # [7 8 9] (poori teesri row)
print(arr2d[:, 1]) # [2 5 8] (poora dusra column)
2D array में index हमेशा
arr[row, column]के format में दिया जाता है।अगर सिर्फ row चाहिए तो
arr2d[row_number]लिख सकते हैं, इससे पूरी row मिल जाती है।अगर पूरा column चाहिए तो
arr2d[:, column_number]लिखा जाता है, यहाँ:का मतलब है "सारी rows"।Slicing भी multi-dimensional arrays पर उसी तरह लागू होती है, जैसे
arr2d[0:2, 1:3]से एक छोटा sub-matrix मिल जाता है।
import numpy as np
arr2d = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
sub_matrix = arr2d[0:2, 1:3]
print(sub_matrix)
# [[2 3]
# [5 6]]
Practical Examples
अब कुछ ऐसे examples देखते हैं जो असली programs में बार-बार काम आते हैं।
Example 1: पहली और आखिरी value निकालना
import numpy as np
marks = np.array([56, 78, 90, 65, 40, 88])
print("Pehla number:", marks[0])
print("Aakhri number:", marks[-1])
Example 2: बीच के हिस्से को निकालना
import numpy as np
marks = np.array([56, 78, 90, 65, 40, 88])
middle = marks[1:5]
print("Beech ke marks:", middle)
Example 3: Slice के जरिए values को बदलना
import numpy as np
marks = np.array([56, 78, 90, 65, 40, 88])
marks[2:4] = [0, 0]
print(marks) # [56 78 0 0 40 88]
Example 4: 2D data में एक block select करना
import numpy as np
grid = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
block = grid[0:2, 1:3]
print(block)
# [[2 3]
# [6 7]]
Fancy Indexing in NumPy
Fancy Indexing NumPy की एक बहुत powerful feature है, जिसमें हम normal index या slice की जगह, एक साथ multiple index values की list या array देकर values select कर सकते हैं।
import numpy as np
arr = np.array([10, 20, 30, 40, 50, 60])
indices = [0, 2, 4]
print(arr[indices]) # [10 30 50]
Fancy Indexing में हम index की एक list या array पास करते हैं, और उन सभी positions की values एक साथ एक नए array में मिल जाती हैं।
यह normal slicing से अलग है क्योंकि इसमें हमें continuous range देने की जरूरत नहीं, बल्कि हम कोई भी random positions चुन सकते हैं।
Fancy Indexing का इस्तेमाल condition के आधार पर values select करने में भी होता है, जैसे –
import numpy as np
arr = np.array([10, 20, 30, 40, 50, 60])
result = arr[arr > 25]
print(result) # [30 40 50 60]
यहाँ arr > 25 एक Boolean array बनाता है, जो बताता है कि कौन-कौन सी values 25 से बड़ी हैं, और उसी के आधार पर fancy indexing उन values को select कर लेती है। इसे Boolean Indexing भी कहा जाता है।
एक बहुत important बात यह है कि Fancy Indexing हमेशा एक नई copy बनाती है, ना कि original array का view। इसलिए fancy indexing से मिले हुए result में change करने पर original array पर असर नहीं पड़ता।
यह SVG दिखा रहा है कि Fancy Indexing में index 0, 2 और 4 (dark purple boxes) को एक साथ चुनकर कैसे एक नया array [10, 30, 50] बनाया जाता है।
Difference Between Array Indexing and Slicing in Python in Hindi
Value की संख्या:
Indexing से एक बार में सिर्फ एक ही value मिलती है, जबकि Slicing से एक साथ कई values का group मिलता है।Result का Type:
Indexing करने पर आमतौर पर एक single value return होती है, जबकि Slicing करने पर हमेशा एक नया array return होता है।Original Array पर असर:
Slicing से मिला array असल array का "view" होता है, यानी उसमें change करने पर original array भी बदल जाता है, जबकि simple indexing से मिली single value बदलने का ऐसा सीधा असर नहीं होता।Syntax:
Indexing में सिर्फ एक number दिया जाता है, जैसेarr[2], जबकि Slicing मेंstart:stop:stepका इस्तेमाल होता है, जैसेarr[1:4]।Use Case:
Indexing तब इस्तेमाल होता है जब हमें कोई specific single value चाहिए, जबकि Slicing तब इस्तेमाल होता है जब array का एक हिस्सा या range चाहिए।